作业

135 阅读6分钟
  1. 修改第一个例子猜谜游戏里面的使用fmt.Scanf 来简化代码实现
package main

import (
   "fmt"
   "math/rand"
   "time"
)

func main() {
   maxNum := 100
   rand.Seed(time.Now().UnixNano())
   secretNumber := rand.Intn(maxNum)

   fmt.Println("Please input your guess")
   var guess = -1
   var flag  = "yes"
   for flag != "no"{
      fmt.Scanln(&guess)
      fmt.Println("You guess is", guess)
      if guess > secretNumber {
         fmt.Println("Your guess is bigger than the secret number. ")
         fmt.Println("Want to continue?(yes or no)")
         fmt.Scanln(&flag)
         if flag == "yes"{
            fmt.Println("Please try again")
         }
         guess = -1
      } else if guess < secretNumber {
         fmt.Println("Your guess is smaller than the secret number.")
         fmt.Println("Want to continue?(yes or no)")
         fmt.Scanln(&flag)
         if flag == "yes"{
            fmt.Println("Please try again")
         }
         guess = -1
      } else {
         fmt.Println("Correct, you Legend!")
         break
      }
   }
}
  1. 修改第二个例子命令行词典里面的,增加另一种翻译引擎的支持 翻译引擎为腾讯翻译君
package main

import (
   "encoding/json"
   "fmt"
   "io/ioutil"
   "net/http"
   "strings"
)

type AutoGenerated struct {
   SessionUUID string `json:"sessionUuid"`
   Translate struct {
      ErrCode int `json:"errCode"`
      ErrMsg string `json:"errMsg"`
      SessionUUID string `json:"sessionUuid"`
      Source string `json:"source"`
      Target string `json:"target"`
      Records []struct {
         SourceText string `json:"sourceText"`
         TargetText string `json:"targetText"`
         TraceID string `json:"traceId"`
      } `json:"records"`
      Full bool `json:"full"`
      Options struct {
      } `json:"options"`
   } `json:"translate"`
   Dict struct {
      Word string `json:"word"`
      DetailURL string `json:"detailUrl"`
      Abstract []struct {
         Ps string `json:"ps"`
         Explanation []string `json:"explanation"`
      } `json:"abstract"`
      Data []struct {
         EnHash string `json:"en_hash"`
      } `json:"data"`
      Type string `json:"type"`
      ErrCode int `json:"errCode"`
      ErrMsg string `json:"errMsg"`
   } `json:"dict"`
   Suggest struct {
      Data []struct {
         ID string `json:"id"`
         Word string `json:"word"`
         Abstract []struct {
            Exp []string `json:"exp"`
            Ps string `json:"ps"`
         } `json:"abstract"`
         SuggestTranslation string `json:"suggest_translation"`
         PhJSON string `json:"ph_json"`
         TransformPl string `json:"transform_pl"`
         TransformIs interface{} `json:"transform_is"`
         TransformWere interface{} `json:"transform_were"`
         TransformBeen interface{} `json:"transform_been"`
         TransformBeing interface{} `json:"transform_being"`
         TransformEr interface{} `json:"transform_er"`
         TransformEst interface{} `json:"transform_est"`
         Groups string `json:"groups"`
         AmEForm interface{} `json:"AmE_form"`
         BrEForm interface{} `json:"BrE_form"`
         ExamplesJSON string `json:"examples_json"`
         WordOfPhrase interface{} `json:"word_of_phrase"`
         Frq int `json:"frq"`
         Valid int `json:"valid"`
         TransformSing interface{} `json:"transform_sing"`
         PrxPhAmE string `json:"prx_ph_AmE"`
         PrxPhBrE string `json:"prx_ph_BrE"`
      } `json:"data"`
      ErrCode int `json:"errCode"`
      ErrMsg string `json:"errMsg"`
   } `json:"suggest"`
   ErrCode int `json:"errCode"`
   ErrMsg string `json:"errMsg"`
}

func translate(word string) {
   url := "https://fanyi.qq.com/api/translate"
   method := "POST"
   payload := strings.NewReader(`source=auto&target=zh&sourceText=` + word +`&qtv=5a3d5ab458f88908
&qtk=9PfIShCScN2DELc%2FuDCt5%2BeP86QHhPu6tSZB6ITACggmPKdhkSh3bwyi6LJqKiEfUhOTcngbToukd5UTNQQ66RbIRRmWQ%2FUaIE1ahXL0vjPQLok3HcfmdvTEZbS%2Fi3f512lBudDDZVAvswD7QZ2B3Q%3D%3D
&ticket=&randstr=&sessionUuid=translate_uuid1652253538206`)
   client := &http.Client {}
   req, err := http.NewRequest(method, url, payload)
   if err != nil {
      fmt.Println(err)
      return
   }
   req.Header.Add("Accept", "application/json, text/javascript, */*; q=0.01")
   req.Header.Add("Accept-Language", "zh-CN,zh;q=0.9")
   req.Header.Add("Connection", "keep-alive")
   req.Header.Add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
   req.Header.Add("Cookie", "pgv_pvid=5948909680; pac_uid=0_935f2dad4e09f; tvfe_boss_uuid=8b4f775e020c647a; eas_sid=21M6a4h7p9P4c8m8J668T1x2z2; RK=oksQmnU1XX; ptcz=3f7da84564a30539d2db26c20ab25bb3ba481b2a2eeb87318fd1dc0755ef6aa3; ptui_loginuin=1260828355@qq.com; fy_guid=366184b4-5d6d-4da7-97d8-c32c19b64fa8; ADHOC_MEMBERSHIP_CLIENT_ID1.0=6ac9805b-e21f-b7e7-8b93-cbda95f4b43a; openCount=1; qtv=5a3d5ab458f88908; qtk=9PfIShCScN2DELc/uDCt5+eP86QHhPu6tSZB6ITACggmPKdhkSh3bwyi6LJqKiEfUhOTcngbToukd5UTNQQ66RbIRRmWQ/UaIE1ahXL0vjPQLok3HcfmdvTEZbS/i3f512lBudDDZVAvswD7QZ2B3Q==; gr_user_id=5b66730c-2ffc-489c-b366-3c6c404734ba; 8507d3409e6fad23_gr_session_id=e72f0b98-87b0-44b7-a42a-a2d69b60f6e7; 8c66aca9f0d1ff2e_gr_session_id=6132b52a-e285-41cc-84bb-6bc05d3deb73; 8c66aca9f0d1ff2e_gr_session_id_6132b52a-e285-41cc-84bb-6bc05d3deb73=true")
   req.Header.Add("Origin", "https://fanyi.qq.com")
   req.Header.Add("Referer", "https://fanyi.qq.com/")
   req.Header.Add("Sec-Fetch-Dest", "empty")
   req.Header.Add("Sec-Fetch-Mode", "cors")
   req.Header.Add("Sec-Fetch-Site", "same-origin")
   req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36")
   req.Header.Add("X-Requested-With", "XMLHttpRequest")
   req.Header.Add("sec-ch-ua", "" Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"")
   req.Header.Add("sec-ch-ua-mobile", "?0")
   req.Header.Add("sec-ch-ua-platform", ""Windows"")
   req.Header.Add("uc", "GLYdIz3WjseABEHSwmZpKBGZ9Afq6AxIJcPpg7ZK1j0=")

   res, err := client.Do(req)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer res.Body.Close()

   body, err := ioutil.ReadAll(res.Body)
   if err != nil {
      fmt.Println(err)
      return
   }
   //fmt.Println(string(body))
   var dictRes AutoGenerated
   err = json.Unmarshal(body,&dictRes)
   if err != nil {
      fmt.Println(err)
      return
   }
   for _, item := range dictRes.Translate.Records {
      fmt.Println(item.TargetText)
   }
   //fmt.Println(dictRes.Translate.Records)
}

func main(){
   fmt.Println("Welcome to use translate App!")
   var flag = "yes"
   for{
      fmt.Print("Please enter what you want to translate: ")
      var word string
      fmt.Scanln(&word)
      translate(word)

      fmt.Print("want to continue?(if wouldn't,enter q to exit): ")
      fmt.Scanln(&flag)
      if flag == "q"{
         fmt.Print("It's been an honor serving you.")
         break
      }
   }
}

运行结果:

image.png

  1. 在上一步骤的基础上,修改代码实现并行请求两个翻译引擎来提高响应速度
```
package main

import (
   "bytes"
   "encoding/json"
   "fmt"
   "io/ioutil"
   "net/http"
   "strings"
   "sync"
)

type DictReq struct {
   TransType string `json:"trans_type"`
   Source string `json:"source"`
}

type AutoGenerated struct {
   Rc int `json:"rc"`
   Wiki struct {
      KnownInLaguages int `json:"known_in_laguages"`
      Description struct {
         Source string `json:"source"`
         Target interface{} `json:"target"`
      } `json:"description"`
      ID string `json:"id"`
      Item struct {
         Source string `json:"source"`
         Target string `json:"target"`
      } `json:"item"`
      ImageURL string `json:"image_url"`
      IsSubject string `json:"is_subject"`
      Sitelink string `json:"sitelink"`
   } `json:"wiki"`
   Dictionary struct {
      Prons struct {
         EnUs string `json:"en-us"`
         En string `json:"en"`
      } `json:"prons"`
      Explanations []string `json:"explanations"`
      Synonym []string `json:"synonym"`
      Antonym []string `json:"antonym"`
      WqxExample [][]string `json:"wqx_example"`
      Entry string `json:"entry"`
      Type string `json:"type"`
      Related []interface{} `json:"related"`
      Source string `json:"source"`
   } `json:"dictionary"`
}

func translate(word string,wg *sync.WaitGroup) {
   defer wg.Done()
   url := "https://api.interpreter.caiyunai.com/v1/dict"
   method := "POST"
   request := DictReq{TransType: "en2zh",Source: word}
   buf, err := json.Marshal(request)
   if err != nil{
      fmt.Println(err)
   }
   data := bytes.NewReader(buf)
   client := &http.Client {}
   req, err := http.NewRequest(method, url, data)
   if err != nil {
      fmt.Println(err)
      return
   }
   req.Header.Add("Accept", "application/json, text/plain, */*")
   req.Header.Add("Accept-Language", "zh-CN,zh;q=0.9")
   req.Header.Add("Connection", "keep-alive")
   req.Header.Add("Content-Type", "application/json;charset=UTF-8")
   req.Header.Add("Origin", "https://fanyi.caiyunapp.com")
   req.Header.Add("Referer", "https://fanyi.caiyunapp.com/")
   req.Header.Add("Sec-Fetch-Dest", "empty")
   req.Header.Add("Sec-Fetch-Mode", "cors")
   req.Header.Add("Sec-Fetch-Site", "cross-site")
   req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36")
   req.Header.Add("X-Authorization", "token:qgemv4jr1y38jyq6vhvi")
   req.Header.Add("app-name", "xy")
   req.Header.Add("device-id", "")
   req.Header.Add("os-type", "web")
   req.Header.Add("os-version", "")
   req.Header.Add("sec-ch-ua", "" Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"")
   req.Header.Add("sec-ch-ua-mobile", "?0")
   req.Header.Add("sec-ch-ua-platform", ""Windows"")

   res, err := client.Do(req)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer res.Body.Close()

   body, err := ioutil.ReadAll(res.Body)
   if err != nil {
      fmt.Println(err)
      return
   }
   if res.StatusCode != 200{
      fmt.Println("bad StatusCode:", res.StatusCode, "body", string(body))
      return
   }
   var dictRes AutoGenerated
   err = json.Unmarshal(body,&dictRes)
   if err != nil{
      fmt.Println(err)
      return
   }
   fmt.Println("彩云小译")
   fmt.Println(word, "UK:", dictRes.Dictionary.Prons.En, "US:", dictRes.Dictionary.Prons.EnUs)
   for _, item := range dictRes.Dictionary.Explanations {
      fmt.Println(item)
   }
}


type AutoGenerated2 struct {
   SessionUUID string `json:"sessionUuid"`
   Translate struct {
      ErrCode int `json:"errCode"`
      ErrMsg string `json:"errMsg"`
      SessionUUID string `json:"sessionUuid"`
      Source string `json:"source"`
      Target string `json:"target"`
      Records []struct {
         SourceText string `json:"sourceText"`
         TargetText string `json:"targetText"`
         TraceID string `json:"traceId"`
      } `json:"records"`
      Full bool `json:"full"`
      Options struct {
      } `json:"options"`
   } `json:"translate"`
   Dict struct {
      Word string `json:"word"`
      DetailURL string `json:"detailUrl"`
      Abstract []struct {
         Ps string `json:"ps"`
         Explanation []string `json:"explanation"`
      } `json:"abstract"`
      Data []struct {
         EnHash string `json:"en_hash"`
      } `json:"data"`
      Type string `json:"type"`
      ErrCode int `json:"errCode"`
      ErrMsg string `json:"errMsg"`
   } `json:"dict"`
   Suggest struct {
      Data []struct {
         ID string `json:"id"`
         Word string `json:"word"`
         Abstract []struct {
            Exp []string `json:"exp"`
            Ps string `json:"ps"`
         } `json:"abstract"`
         SuggestTranslation string `json:"suggest_translation"`
         PhJSON string `json:"ph_json"`
         TransformPl string `json:"transform_pl"`
         TransformIs interface{} `json:"transform_is"`
         TransformWere interface{} `json:"transform_were"`
         TransformBeen interface{} `json:"transform_been"`
         TransformBeing interface{} `json:"transform_being"`
         TransformEr interface{} `json:"transform_er"`
         TransformEst interface{} `json:"transform_est"`
         Groups string `json:"groups"`
         AmEForm interface{} `json:"AmE_form"`
         BrEForm interface{} `json:"BrE_form"`
         ExamplesJSON string `json:"examples_json"`
         WordOfPhrase interface{} `json:"word_of_phrase"`
         Frq int `json:"frq"`
         Valid int `json:"valid"`
         TransformSing interface{} `json:"transform_sing"`
         PrxPhAmE string `json:"prx_ph_AmE"`
         PrxPhBrE string `json:"prx_ph_BrE"`
      } `json:"data"`
      ErrCode int `json:"errCode"`
      ErrMsg string `json:"errMsg"`
   } `json:"suggest"`
   ErrCode int `json:"errCode"`
   ErrMsg string `json:"errMsg"`
}

func translate2(word string,wg *sync.WaitGroup) {
   defer wg.Done()
   url := "https://fanyi.qq.com/api/translate"
   method := "POST"
   payload := strings.NewReader(`source=auto&target=zh&sourceText=` + word +`&qtv=5a3d5ab458f88908
&qtk=9PfIShCScN2DELc%2FuDCt5%2BeP86QHhPu6tSZB6ITACggmPKdhkSh3bwyi6LJqKiEfUhOTcngbToukd5UTNQQ66RbIRRmWQ%2FUaIE1ahXL0vjPQLok3HcfmdvTEZbS%2Fi3f512lBudDDZVAvswD7QZ2B3Q%3D%3D
&ticket=&randstr=&sessionUuid=translate_uuid1652253538206`)
   client := &http.Client {}
   req, err := http.NewRequest(method, url, payload)
   if err != nil {
      fmt.Println(err)
      return
   }
   req.Header.Add("Accept", "application/json, text/javascript, */*; q=0.01")
   req.Header.Add("Accept-Language", "zh-CN,zh;q=0.9")
   req.Header.Add("Connection", "keep-alive")
   req.Header.Add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
   req.Header.Add("Cookie", "pgv_pvid=5948909680; pac_uid=0_935f2dad4e09f; tvfe_boss_uuid=8b4f775e020c647a; eas_sid=21M6a4h7p9P4c8m8J668T1x2z2; RK=oksQmnU1XX; ptcz=3f7da84564a30539d2db26c20ab25bb3ba481b2a2eeb87318fd1dc0755ef6aa3; ptui_loginuin=1260828355@qq.com; fy_guid=366184b4-5d6d-4da7-97d8-c32c19b64fa8; ADHOC_MEMBERSHIP_CLIENT_ID1.0=6ac9805b-e21f-b7e7-8b93-cbda95f4b43a; openCount=1; qtv=5a3d5ab458f88908; qtk=9PfIShCScN2DELc/uDCt5+eP86QHhPu6tSZB6ITACggmPKdhkSh3bwyi6LJqKiEfUhOTcngbToukd5UTNQQ66RbIRRmWQ/UaIE1ahXL0vjPQLok3HcfmdvTEZbS/i3f512lBudDDZVAvswD7QZ2B3Q==; gr_user_id=5b66730c-2ffc-489c-b366-3c6c404734ba; 8507d3409e6fad23_gr_session_id=e72f0b98-87b0-44b7-a42a-a2d69b60f6e7; 8c66aca9f0d1ff2e_gr_session_id=6132b52a-e285-41cc-84bb-6bc05d3deb73; 8c66aca9f0d1ff2e_gr_session_id_6132b52a-e285-41cc-84bb-6bc05d3deb73=true")
   req.Header.Add("Origin", "https://fanyi.qq.com")
   req.Header.Add("Referer", "https://fanyi.qq.com/")
   req.Header.Add("Sec-Fetch-Dest", "empty")
   req.Header.Add("Sec-Fetch-Mode", "cors")
   req.Header.Add("Sec-Fetch-Site", "same-origin")
   req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36")
   req.Header.Add("X-Requested-With", "XMLHttpRequest")
   req.Header.Add("sec-ch-ua", "" Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"")
   req.Header.Add("sec-ch-ua-mobile", "?0")
   req.Header.Add("sec-ch-ua-platform", ""Windows"")
   req.Header.Add("uc", "GLYdIz3WjseABEHSwmZpKBGZ9Afq6AxIJcPpg7ZK1j0=")

   res, err := client.Do(req)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer res.Body.Close()

   body, err := ioutil.ReadAll(res.Body)
   if err != nil {
      fmt.Println(err)
      return
   }
   //fmt.Println(string(body))
   var dictRes AutoGenerated2
   err = json.Unmarshal(body,&dictRes)
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("腾讯翻译君")
   for _, item := range dictRes.Translate.Records {
      fmt.Println(item.TargetText)
   }
}

func main(){
   var word string
   fmt.Scanln(&word)
   wg := sync.WaitGroup{}
   wg.Add(2)
   translate(word,&wg)
   translate2(word,&wg)
}
```

结果:

image.png